﻿using System.Collections.Generic;
using System.Windows.Input;
using personalplaner.business.stamm;
using personalplaner.common.mvvm;
using personalplaner.common.mvvm.commands;
using System.Collections.ObjectModel;

namespace personalplaner.gui.common.viewmodels.models
{
	public class InitWizardAnstellungModel : BaseModel
	{
        public InitWizardAnstellungModel()
        {
            SetNewAbteilung();
        }

        private void SetNewAbteilung()
        {
            SelectedAnstellung = new Anstellung
            {
                EinsatzProTag = 1,
                Prioritaet = 0
            };
        }

		#region Commands
		
		ICommand _savecommand;
		public ICommand SaveCommand
		{
			get
			{
				if (_savecommand == null)
					_savecommand = new RelayCommand(OnSave, parameter => SelectedAnstellung != null && SelectedAnstellung.IsValid);
				return _savecommand;
			}
		}

		private void OnSave(object parameter)
		{
			Anstellungen.Add(SelectedAnstellung);
			ActiveGridItem = null;

            SetNewAbteilung();

			//if (SelectedAnstellung == null || !SelectedAnstellung.IsValid)
			//{
			//    MessageBox.Show(Window.GetWindow(Parent),
			//        "Bitte füllen Sie alle Felder aus.",
			//        "",
			//        MessageBoxButton.OK,
			//        MessageBoxImage.Exclamation);
			//    return;
			//}

			////Update
			//if (!SelectedAnstellung.IsNew)
			//{
			//    var da = GetService<IAnstellungDataAccess>();
			//    if (!da.UpdateAnstellung(SelectedAnstellung))
			//    {
			//        MessageBox.Show(Window.GetWindow(Parent),
			//                        string.Format("Beim Speichern der Anstellung : {0} ist ein Fehler aufgetreten!", SelectedAnstellung.Name),
			//                        "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
			//        return;
			//    }
			//}
			//else
			//{
			//    var da = GetService<IAnstellungDataAccess>();
			//    if (!da.SetAnstellung(SelectedAnstellung))
			//    {
			//        MessageBox.Show(Window.GetWindow(Parent),
			//                        string.Format("Beim Speichern der Anstellung : {0} ist ein Fehler aufgetreten!", SelectedAnstellung.Name),
			//                        "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
			//        return;
			//    }

			//    Anstellungen.Add(SelectedAnstellung);
			//}

			//for (int i = 0; i < Anstellungen.Count; i++)
			//{
			//    if (Anstellungen[i].AnstellungID == SelectedAnstellung.AnstellungID)
			//    {
			//        Anstellungen[i] = SelectedAnstellung;
			//        ActiveGridItem = SelectedAnstellung;
			//        break;
			//    }
			//}
		}

		ICommand _newcommand;
		public ICommand NewCommand
		{
			get
			{
				if (_newcommand == null)
					_newcommand = new RelayCommand(OnNew);
				return _newcommand;
			}
		}

		private void OnNew(object parameter)
		{
			ActiveGridItem = null;

            SetNewAbteilung();
		}

		ICommand _deleteCommand;
		public ICommand DeleteCommand
		{
			get
			{
				if (_deleteCommand == null)
					_deleteCommand = new RelayCommand(OnDelete, param => ActiveGridItem != null);
				return _deleteCommand;
			}
		}

		private void OnDelete(object parameter)
		{
			Anstellungen.Remove(SelectedAnstellung);
			ActiveGridItem = null;

            SetNewAbteilung();

			//if (SelectedAnstellung.IsNew)
			//{
			//    MessageBox.Show("Die Anstellung kann nicht gelöscht werden da diese noch nicht existiert!", "",
			//                    MessageBoxButton.OK);
			//    return;
			//}

			//var da = GetService<IAnstellungDataAccess>();
			//if (da.GetIsAnstellungUsed(SelectedAnstellung.AnstellungID))
			//{
			//    MessageBox.Show(Window.GetWindow(Parent),
			//                    "Die Anstellung kann nicht gelöscht werden da diese bereits in einem Plan verwendet wird.",
			//                    "Anstellung löschen",
			//                    MessageBoxButton.OK,
			//                    MessageBoxImage.Asterisk);
			//    return;
			//}

			//if (MessageBox.Show(Window.GetWindow(Parent),
			//                    string.Format("Sind Sie sicher dass Sie die Anstellung:\n{0}\nlöschen möchten?", SelectedAnstellung.Name),
			//                    "Anstellung löschen?",
			//                    MessageBoxButton.OKCancel) == MessageBoxResult.OK)
			//{
			//    if (!da.DeleteAnstellung(SelectedAnstellung.AnstellungID))
			//    {
			//        MessageBox.Show(Window.GetWindow(Parent), string.Format("Die Anstellung : {0} konnte nicht gelöscht werden!", SelectedAnstellung.Name), "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
			//        return;
			//    }

			//    SelectedAnstellung = null;
			//    ActiveGridItem = null;
			//}
		}



		#endregion

		#region Properties

		IList<Anstellung> _anstellungen;
		public IList<Anstellung> Anstellungen
		{
			get
			{
				if (_anstellungen == null)
					_anstellungen = new ObservableCollection<Anstellung>();
				return _anstellungen;
			}
		}

		Anstellung _activegriditem;
		public Anstellung ActiveGridItem
		{
			get
			{
				return _activegriditem;
			}
			set
			{
				_activegriditem = value;
				RaisePropertyChanged("ActiveGridItem");

				SelectedAnstellung = value;
			}
		}

		Anstellung _selectedAnstellung;
		public Anstellung SelectedAnstellung
		{
			get
			{
				return _selectedAnstellung;
			}
			set
			{
				_selectedAnstellung = value;
				RaisePropertyChanged("SelectedAnstellung");
				RaisePropertyChanged("IsEditEnabled");
			}
		}

		public bool IsEditEnabled
		{
			get
			{
				return SelectedAnstellung != null;
			}
		}

		#endregion
	}
}
